template <typename T, int SIZE>
class MemoryBlock {
 public:
  MemoryBlock() : ptr_(new T[SIZE]) {}
  ~MemoryBlock() {
    delete[] ptr_;
    cout << "deconstruct" << endl;
  }
  int GetSize() { return SIZE; }
  operator T*() const { return ptr_; }  // 隐式转换函数
  void operator() {
    delete[] ptr_;
    cout << "deconstruct" << endl;
  }

 private:
  T* ptr_;
};